﻿using EightOData.Extensions.Layout;
using EightOData.Extensions.WebServices;
using EightOData.Model;
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Navigation;

namespace EightOData
{
    /// <summary>
    /// Une page affichant les cadeaux d'une liste.
    /// </summary>
    public sealed partial class GiftPage
    {
        #region Properties

        public ObservableCollection<GroupInfoList<Gift>> Gifts { get; private set; }

        #endregion

        #region Constructor

        /// <summary>
        /// Initialisation d'une page de type GiftPage.
        /// </summary>
        public GiftPage()
        {
            InitializeComponent();
            LoadDataAsync();
        }

        #endregion

        #region Methods

        /// <summary>
        /// Chargement asynchrone des données.
        /// </summary>
        private void LoadDataAsync()
        {
            Gifts = new ObservableCollection<GroupInfoList<Gift>>();
            DataContext = this;
            (SemanticZoom.ZoomedOutView as ListViewBase).ItemsSource = DataSource.View.CollectionGroups;
        }

        #endregion

        #region Events

        /// <summary>
        /// Effectue la navigation vers la page précédente.
        /// </summary>
        private void BackButton_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Frame.Navigate(typeof(WishListPage));
        }

        /// <summary>
        /// Effectue la navigation vers la page d'édition de cadeaux.
        /// </summary>
        private void Add_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(GiftEditionPage));
        
        }


        /// <summary>
        /// Supprime le cadeau sélectionné.
        /// </summary>
        /// <param name="sender">Bouton à l'origine de l'événement</param>
        /// <param name="e">Paramètres de l'événement</param>
        private void Delete_Click(object sender, RoutedEventArgs e)
        {
            if (ContentGrid.SelectedItem == null)
                return;

            // Recherche de la collection contenant l'élément sélectionné puis suppression de l'élément
            var group = Gifts.Single(x => x.Contains(ContentGrid.SelectedItem));
            group.Remove(ContentGrid.SelectedItem);

            // Suppression du groupe s'il ne contient plus aucun élément
            if (!group.Any())
                Gifts.Remove(group);
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Si aucun cadeau, on ouvre l'AppBar
            if(!Gifts.Any())
                BottomAppBar.IsOpen = true;

            // Récupération du paramètre
            if (e.Parameter != null)
            {
                var gift = e.Parameter as Gift;
                // TODO : Ajout dans la collection Gifts !
            }
        }

        #endregion

        /// <summary>
        /// Effectue la navigation vers la page de recherche.
        /// </summary>
        private void Search_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Frame.Navigate(typeof(SearchResultsPage));
        }

        private void Save(Gift gift)
        {
            LocalStorage.Data.Add(gift);
            LocalStorage.Save<Gift>();
        }
    }
}
